package servlets;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.StringTokenizer;
import java.util.Vector;

import javax.jdo.PersistenceManager;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import model.KategorijaPovlastice;
import model.Mesto;
import model.Povlastica;
import model.Prevoznik;
import model.PutnaDuz;
import model.User;
import model.Util;
import model.VrstaPrevoza;
import app.PMF;

import com.google.appengine.api.datastore.DatastoreService;
import com.google.appengine.api.datastore.DatastoreServiceFactory;
import com.google.appengine.api.datastore.Entity;
import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.PreparedQuery;
import com.google.appengine.api.datastore.Query;
import com.google.appengine.api.datastore.Transaction;

public class TimeTableAdminServlet extends HttpServlet {

	private static final long serialVersionUID = -7310304827588123988L;

	@SuppressWarnings("deprecation")
	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
	throws ServletException, IOException {

		// uzimamo iz sesije podatke
		HttpSession session = req.getSession(true);
		User user = (User) session.getAttribute("user");

		String ID = req.getParameter("ID");
		String showTrip = req.getParameter("showTrip");
		String fromTown = req.getParameter("fromTown");
		String toTown = req.getParameter("toTown");

		// za akcije putnih duzi
		String showTripData = req.getParameter("showTripData");
		String changeTrip = req.getParameter("changeTrip");
		String changedTrip = req.getParameter("changedTrip");
		String deleteTrip = req.getParameter("deleteTrip");
		// za parametre prosledjene sa forme
		String cena = req.getParameter("cena");
		String polazak = req.getParameter("polazak");
		String dolazak = req.getParameter("dolazak");
		String[] bens = req.getParameterValues("bens");

		// za akcije povlastice
		String showBenefit = req.getParameter("showBenefit");
		String changeBenefit = req.getParameter("changeBenefit");
		String changedBenefit = req.getParameter("changedBenefit");
		String deleteBenefit = req.getParameter("deleteBenefit");
		// za parametre prosledjene sa forme
		// String naziv = req.getParameter("naziv");Ucitavamo ga gore
		String op = req.getParameter("op");
		// String vrednost = req.getParameter("vrednost");
		String katID = req.getParameter("kat");

		// za dodavanje nove putne duzi
		String addNewTrip = req.getParameter("addNewTrip");
		String addedNewTrip = req.getParameter("addedNewTrip");

		//za akcije prevoznika		
		String pickCarrier = req.getParameter("pickCarrier");
		String showCarrier = req.getParameter("showCarrier");
		String changeCarrier = req.getParameter("changeCarrier");
		String changedCarrier = req.getParameter("changedCarrier");
		String deleteCarrier = req.getParameter("deleteCarrier");

		// za dodavanje novog prevoznika
		String naziv = req.getParameter("naziv");
		String aliases = req.getParameter("aliases");
		String noviPrev = req.getParameter("novi");
		String noviPrevNaziv = req.getParameter("noviNaziv");
		String adresa = req.getParameter("adresa");
		String eMail = req.getParameter("eMail");
		String telefon = req.getParameter("telefon");
		String username = req.getParameter("username");
		String password = req.getParameter("password");
		String vrstaPrevoza = req.getParameter("vrstaPrevoza");
		String addNewCarrier = req.getParameter("addNewCarrier");
		String addedNewCarrier = req.getParameter("addedNewCarrier");		

		// ako korisnik nije logovan, vracamo ga na pocetnu stranicu
		if (user == null || !user.isLoggedIn() || !user.isAdmin()) {
			req.getRequestDispatcher("WebContent/logIn.jsp").forward(req, resp);
			return;
		}

		// ako je logovan ucitavamo SAMO sva mesta
		System.out.println("\n\tUcitavamo iz baze mesta...");

		Vector<Mesto> mesta = Util.getAllEntitiesFromTable(Mesto.class);
		session.setAttribute("allTowns", mesta);

		System.out.println("\n\tUcitano: " + mesta.size() + " mesta");

		// ako trebamo da pokazemo i linije, trebamo osveziti samo linije
		if (showTrip != null && showTrip.equals("true")) {
			// trebamo prikazati putanju
			System.out.println("\n\tIzdvajamo podatke za prikaz");

			Mesto mfromTown = Util.getMestoFromName(fromTown);
			Mesto mToTown = Util.getMestoFromName(toTown);
			session.setAttribute("mfromTown", mfromTown);
			session.setAttribute("mToTown", mToTown);

			Vector<PutnaDuz> trips = Util
			.getAllEntitiesFromTable(PutnaDuz.class);
			//trips = Util.getPaths(mfromTown, mToTown, trips, Util.NAJBRZI);

			session.setAttribute("allTrips", trips);
			System.out.println("\n\tUcitano: " + trips.size() + " putnih duzi");

			// redirektovacemo na stranicu sa redom voznje
			RequestDispatcher disp = req
			.getRequestDispatcher("WebContent/admin/adminTimeTable.jsp");
			disp.forward(req, resp);
			return;
		}

		// za prikaz podataka o putnoj duzi
		if (showTripData != null && showTripData.equals("true")) {

			PutnaDuz putnaDuz = Util.getEntityFromTableByID(PutnaDuz.class, ID);
			session.setAttribute("putnaDuz", putnaDuz);

			// redirektovacemo na stranicu sa redom voznje
			RequestDispatcher disp = req
			.getRequestDispatcher("WebContent/admin/showTrip.jsp");
			disp.forward(req, resp);
			return;
		}

		// za prikaz forme za izmenu podataka o putnoj duzi
		if (changeTrip != null && changeTrip.equals("true")) {

			PutnaDuz putnaDuz = Util.getEntityFromTableByID(PutnaDuz.class, ID);
			session.setAttribute("putnaDuz", putnaDuz);

			session.setAttribute("mfromTown", putnaDuz.getMestoOd());
			session.setAttribute("mToTown", putnaDuz.getMestoDo());

			// redirektovacemo na stranicu sa redom voznje
			RequestDispatcher disp = req
			.getRequestDispatcher("WebContent/admin/changeTrip.jsp");
			disp.forward(req, resp);
			return;
		}

		// za izmenu podataka o putnoj duzi
		if (changedTrip != null && changedTrip.equals("true")) {

			System.out.println("Changed: " + changedTrip);

			if (fromTown != null && toTown != null && cena != null
					&& polazak != null && dolazak != null) {

				try {
					PersistenceManager pm = PMF.get().getPersistenceManager();
					PutnaDuz pd = Util.getEntityFromTableByID(PutnaDuz.class,
							ID);

					SimpleDateFormat sdf = new SimpleDateFormat("hh:mm");

					pd.setMestoOd(Util.getMestoFromName(fromTown).getSifra());
					pd.setMestoDo(Util.getMestoFromName(toTown).getSifra());
					pd.setCena(Double.parseDouble(cena));
					pd.setPolazak(sdf.parse(polazak));
					pd.setDolazak(sdf.parse(dolazak));

					List<Key> povls = new ArrayList<Key>();
					// prolazimo kroz sve selektovane povlastice u bens i
					// dodajemo ih u putnu liniju
					for (int i = 0; i < bens.length; i++) {
						Povlastica povl = Util.getEntityFromTableByID(
								Povlastica.class, bens[i]);
						povls.add(povl.getSifra());
					}
					pd.setPovlastica(povls);

					// snimamo novu putnu duz
					pm.makePersistent(pd);
					pm.close();
				} catch (NumberFormatException e) {
					e.printStackTrace();
				} catch (ParseException e) {
					e.printStackTrace();
				}

				resp.sendRedirect("/admin");
				return;
			} else {
				// nepravilno uneti podaci, ispisati gresku
				RequestDispatcher disp = req
				.getRequestDispatcher("/WebContent/changeTrip.jsp");
				disp.forward(req, resp);
				return;
			}

			/*
			 * //redirektovacemo na stranicu sa redom voznje RequestDispatcher
			 * disp =
			 * req.getRequestDispatcher("WebContent/admin/changeTrip.jsp");
			 * disp.forward(req, resp); return;
			 */
		}

		// za brisanje putne duzi
		if (deleteTrip != null && deleteTrip.equals("true")) {

			System.out.println("ID<" + ID + ">");
			PutnaDuz putnaDuz = Util.getEntityFromTableByID(PutnaDuz.class, ID);

			DatastoreService ds = DatastoreServiceFactory.getDatastoreService();
			System.out.println("Brisemo putnu duz: " + putnaDuz + "...");
			Transaction tx = ds.beginTransaction();
			ds.delete(putnaDuz.getSifra());
			tx.commit();
			// redirektovacemo na stranicu sa redom voznje
			resp.sendRedirect("/admin");
			return;
		}

		// za prikaz podataka o prevozniku
		if (pickCarrier != null && pickCarrier.equals("true")) {

			Vector<Prevoznik> sviPreviznici = Util.getAllEntitiesFromTable(Prevoznik.class);
			session.setAttribute("sviPrevoznici", sviPreviznici);

			// redirektovacemo na stranicu sa redom voznje
			RequestDispatcher disp = req
			.getRequestDispatcher("WebContent/admin/pickCarrier.jsp");
			disp.forward(req, resp);
			return;
		}
		
		// za prikaz podataka o prevozniku
		if (showCarrier != null && showCarrier.equals("true")) {

			Prevoznik prevoznik = Util.getEntityFromTableByID(Prevoznik.class,ID);
			session.setAttribute("prevoznik", prevoznik);
			
			User korisnik = prevoznik.getKorisnik();
			if(korisnik != null){
				req.setAttribute("username", korisnik.getUsername());
				req.setAttribute("password", korisnik.getPassword());
				//session.setAttribute("username", korisnik.getUsername());
				//session.setAttribute("password", korisnik.getPassword());
			}
			
			String sAliases = "";
			for(String alias : prevoznik.getAliases()){
				sAliases += alias + "\n";
			}
			session.setAttribute("aliases", sAliases);

			// redirektovacemo na stranicu sa redom voznje
			RequestDispatcher disp = req
			.getRequestDispatcher("WebContent/admin/showCarrier.jsp");
			disp.forward(req, resp);
			return;
		}

		// za prikaz forme za izmenu podataka o prevozniku
		if (changeCarrier != null && changeCarrier.equals("true")) {

			Prevoznik prevoznik = Util.getEntityFromTableByID(Prevoznik.class,ID);
			session.setAttribute("prevoznik", prevoznik);
			User korisnik = prevoznik.getKorisnik();
			if(korisnik != null){
				req.setAttribute("username", korisnik.getUsername());
				req.setAttribute("password", korisnik.getPassword());
				//session.setAttribute("username", korisnik.getUsername());
				//session.setAttribute("password", korisnik.getPassword());
			}
			/*else{
				session.setAttribute("username", "");
				session.setAttribute("password", "");
			}*/
			
			//tabamo sve aliase u jedan string, razdvojeni novim redom
			String sAliases = "";
			for(String alias : prevoznik.getAliases()){
				sAliases += alias + "\n";
			}
			session.setAttribute("aliases", sAliases);

			// redirektovacemo na stranicu sa redom voznje
			RequestDispatcher disp = req
			.getRequestDispatcher("WebContent/admin/changeCarrier.jsp");
			disp.forward(req, resp);
			return;
		}

		// za izmenu podataka o prevozniku
		if (changedCarrier != null && changedCarrier.equals("true")) {

			PersistenceManager pm = PMF.get().getPersistenceManager();

			Prevoznik prevoznik = Util.getEntityFromTableByID(Prevoznik.class,ID);
			User korisnik = Util.getEnityByFieldEqualsValue(User.class, "username", username);
			
			if(korisnik == null){
				//prevoznik nema korisnika u bazi
				korisnik = new User(username, password);
				pm.makePersistent(korisnik);
				prevoznik.setKorisnik(korisnik.getSifra());
				System.out.println("Snimljen novi korisnik: " + korisnik);
			}else {
				//prevoznik postoji, trebamo da apdejtujemo podatke
				korisnik.setUsername(username);
				korisnik.setPassword(password);
				pm.makePersistent(korisnik);
				System.out.println("Izmenjeni korisnik: " + korisnik);
			}
			
			prevoznik.setNaziv(naziv);
			//sad dodajemo i aliase
			ArrayList<String> lAliases = new ArrayList<String>();
			StringTokenizer st = new StringTokenizer(aliases, "\n");
			while (st.hasMoreTokens()) {				
				String alias = st.nextToken();
				lAliases.add(alias);
				System.out.println("Alias: " + alias);
			}			
					
			prevoznik.setAliases(lAliases);
			
			prevoznik.setAdresa(adresa);
			prevoznik.seteMail(eMail);
			prevoznik.setTelefon(telefon);

			// snimamo novog prevoznika
			pm.makePersistent(prevoznik);
			session.setAttribute("prevoznik", prevoznik);
			session.setAttribute("aliases", aliases);
			System.out.println("Novi prevoznik: " + prevoznik);
			pm.close();

			// redirektovacemo na stranicu sa redom voznje
			RequestDispatcher disp = req
			.getRequestDispatcher("WebContent/admin/showCarrier.jsp");
			disp.forward(req, resp);
			return;
		}

		// za brisanje prevoznika
		if (deleteCarrier != null && deleteCarrier.equals("true")) {

			Prevoznik prevoznik = Util.getEntityFromTableByID(Prevoznik.class,
					ID);

			DatastoreService ds = DatastoreServiceFactory.getDatastoreService();

			System.out.println("Brisemo prevoznika: " + prevoznik + "...");
			Transaction tx = ds.beginTransaction();
			ds.delete(prevoznik.getSifra());
			System.out.println("Prevoznik obrisan!");
			tx.commit();

			// brisemo i njegov nalog za logovanje
			// NAPOMENA: brisanje razlicitih entiteta moramo brisati u odvojenim
			// transakcijama, inace se javlja greska!
			tx = ds.beginTransaction();
			ds.delete(prevoznik.getKorisnik().getSifra());
			tx.commit();

			tx = ds.beginTransaction();
			System.out.println("Brisemo njegove putne duzi");
			Query qDelCarrier = new Query(PutnaDuz.class.getSimpleName());
			qDelCarrier.addFilter("prevoznik", Query.FilterOperator.EQUAL,
					prevoznik.getSifra());
			PreparedQuery pqDelCarrier = ds.prepare(qDelCarrier);
			System.out.println("Pronadjeno: " + pqDelCarrier.countEntities()
					+ ", putnih duzi");

			for (Entity result : pqDelCarrier.asIterable()) {
				ds.delete(result.getKey());
			}

			tx.commit();
			System.out.println("Obrisano");

			// redirektovacemo na stranicu sa redom voznje
			RequestDispatcher disp = req.getRequestDispatcher("/admin");
			disp.forward(req, resp);
			return;
		}

		// ako trebamo prikazati povlasticu
		if (showBenefit != null && showBenefit.equals("true")) {

			// dodajemo za prikaz povlasticu sa benID
			Povlastica povl = Util.getEntityFromTableByID(Povlastica.class, ID);
			session.setAttribute("povl", povl);

			Vector<KategorijaPovlastice> benCats = Util
			.getAllEntitiesFromTable(KategorijaPovlastice.class);
			session.setAttribute("allBenCats", benCats);
			// System.out.println("\n\tKategorije povlastice, ucitane");

			// redirektovacemo na stranicu za izmenu povlastice
			RequestDispatcher disp = req
			.getRequestDispatcher("WebContent/admin/showBenefit.jsp");
			disp.forward(req, resp);
			return;
		}
		// ako trebamo ici na izmenu,
		if (changeBenefit != null && changeBenefit.equals("true")) {

			// dodajemo za prikaz povlasticu sa benID
			Povlastica povl = Util.getEntityFromTableByID(Povlastica.class, ID);
			System.out.println("menjamo povlasticu: " + povl);
			session.setAttribute("povl", povl);

			Vector<KategorijaPovlastice> benCats = Util
			.getAllEntitiesFromTable(KategorijaPovlastice.class);
			session.setAttribute("allBenCats", benCats);
			System.out.println("\n\tKategorije povlastice, ucitane");

			// redirektovacemo na stranicu za izmenu povlastice
			RequestDispatcher disp = req
			.getRequestDispatcher("WebContent/admin/changeBenefit.jsp");
			disp.forward(req, resp);
			return;
		}

		// ako trebamo ici na izmenu,
		if (changedBenefit != null && changedBenefit.equals("true")) {

			PersistenceManager pm = PMF.get().getPersistenceManager();

			// ucitavamo povlasticu i kategoriju povlastice
			Povlastica povl = Util.getEntityFromTableByID(Povlastica.class, ID);
			povl = Util.getEntityFromTableByID(Povlastica.class, povl
					.getSifra().getId() + "");

			KategorijaPovlastice katPovl = Util.getEntityFromTableByID(
					KategorijaPovlastice.class, katID);

			povl.setNaziv(naziv);
			povl.setOp(Integer.parseInt(op));
			povl.setKatPovlastice(katPovl.getSifra());
			// snimamo povlasticu
			pm.makePersistent(povl);
			session.setAttribute("povl", povl);
			System.out.println("Nova povlastica: " + povl);

			// redirektovacemo na stranicu za izmenu povlastice
			RequestDispatcher disp = req
			.getRequestDispatcher("WebContent/admin/showBenefit.jsp");
			disp.forward(req, resp);

			pm.close();

			return;
		}

		if (deleteBenefit != null && deleteBenefit.equals("true")) {

			DatastoreService ds = DatastoreServiceFactory.getDatastoreService();

			// ucitavamo povlasticu i kategoriju povlastice
			Povlastica povl = Util.getEntityFromTableByID(Povlastica.class, ID);
			povl = Util.getEntityFromTableByID(Povlastica.class, povl
					.getSifra().getId() + "");

			System.out.println("Brisemo povlasticu: " + povl + "...");
			Transaction tx = ds.beginTransaction();
			ds.delete(povl.getSifra());
			tx.commit();
			System.out.println("Povlastica obrisana!");

			// redirektovacemo na stranicu za izmenu povlastice
			resp.sendRedirect("/admin");
			return;
		}

		/*
		 * //ako trebamo dodati povlasticu if(naziv != null && op != null &&
		 * vrednost != null && katID != null){ PersistenceManager pm =
		 * PMF.get().getPersistenceManager();
		 * 
		 * KategorijaPovlastice katPovl =
		 * Util.getEntityFromTableByID(KategorijaPovlastice.class, katID);
		 * 
		 * Povlastica ben = new Povlastica(naziv, Integer.parseInt(op),
		 * Double.parseDouble(vrednost), katPovl.getSifra());
		 * pm.makePersistent(ben);
		 * 
		 * System.out.println("\n\tNova povlastica: " + ben + ", snimljena");
		 * 
		 * //redirektovacemo na stranicu sa redom voznje RequestDispatcher disp
		 * = req.getRequestDispatcher("/timeTableServlet"); disp.forward(req,
		 * resp);
		 * 
		 * session.removeAttribute("povl"); pm.close();
		 * 
		 * return; }
		 */

		if (addNewCarrier != null && addNewCarrier.equals("true")) {
			// trebamo ucitati sve vrste prevoza
			Vector<VrstaPrevoza> vrstePrevoza = Util.getAllEntitiesFromTable(VrstaPrevoza.class);
			session.setAttribute("vrstePrevoza", vrstePrevoza);

			Vector<Prevoznik> sviPreviznici = Util.getAllEntitiesFromTable(Prevoznik.class);
			session.setAttribute("sviPrevoznici", sviPreviznici);

			System.out.println("Ucitano: " + sviPreviznici.size() + " prevoznika");

			/*
			 * @SuppressWarnings("unchecked") Vector<Povlastica> povlastice =
			 * (Vector<Povlastica>) session.getAttribute("allBens");
			 * session.setAttribute("allBenefits", povlastice);
			 */
			// redirektovacemo na stranicu za unos novog prevoznika
			RequestDispatcher disp = req
			.getRequestDispatcher("WebContent/admin/addNewCarrier.jsp");
			disp.forward(req, resp);
			return;
		}

		// ako trebamo dodati novog prevoznika
		if (addedNewCarrier != null && addedNewCarrier.equals("true")) {

			if (username != null && password != null && adresa != null
					&& eMail != null && telefon != null) {

				PersistenceManager pm = PMF.get().getPersistenceManager();
				VrstaPrevoza vrPr = Util.getEntityFromTableByID(VrstaPrevoza.class, vrstaPrevoza);

				//TODO Ovde treba dodati proveru o username
				
				User korisnik = new User(username, password);
				pm.makePersistent(korisnik);
				System.out.println("Snimljen novi korisnik: " + korisnik);
				
				//sad dodajemo i aliase
				ArrayList<String> lAliases = new ArrayList<String>();
				for (String alias : aliases.split("\n")){
					lAliases.add(alias);
					System.out.println("Alias: " + alias);
				}						

				if (noviPrev != null && noviPrev.equals("true")) {
					Prevoznik prevoznik = new Prevoznik(noviPrevNaziv, lAliases, 
							adresa, eMail, telefon, vrPr.getSifra(), korisnik.getSifra());
					pm.makePersistent(prevoznik);
					System.out.println("Snimljen novi prevoznik: " + prevoznik);
				}else {
					//prevoznik vec postoji u bazi, samo trebamo da apdejtujemo podakte
					Prevoznik prevoznik = Util.getEntityFromTableByID(Prevoznik.class, ID);
					prevoznik.setAliases(lAliases);
					prevoznik.setAdresa(adresa);
					prevoznik.seteMail(eMail);
					prevoznik.setKorisnik(korisnik.getSifra());
					prevoznik.setTelefon(telefon);
					prevoznik.setVrstaPrevoza(vrPr.getSifra());
					pm.makePersistent(prevoznik);
					System.out.println("Snimljen novi prevoznik: " + prevoznik);
				}

				// redirektovacemo na pocetnu stranicu
				RequestDispatcher disp = req
				.getRequestDispatcher("WebContent/admin/adminTimeTable.jsp");
				disp.forward(req, resp);
				pm.close();
				return;
			} else {
				// nepravilno uneti podaci, ispisati gresku
				System.out.println("Neispravni podaci");
				System.out.println(req.getQueryString());
				RequestDispatcher disp = req
				.getRequestDispatcher("WebContent/addTrip.jsp");
				disp.forward(req, resp);
				return;
			}
		}

		if (addNewTrip != null && addNewTrip.equals("true")) {
			// trebamo ucitati sve prevoznike
			Vector<Prevoznik> prevoznici = Util
			.getAllEntitiesFromTable(Prevoznik.class);
			session.setAttribute("allCarriers", prevoznici);

			@SuppressWarnings("unchecked")
			Vector<Povlastica> povlastice = (Vector<Povlastica>) session
			.getAttribute("allBens");
			session.setAttribute("allBenefits", povlastice);

			// redirektovacemo na stranicu za unos nove linije
			RequestDispatcher disp = req
			.getRequestDispatcher("WebContent/admin/addTrip.jsp");
			disp.forward(req, resp);
			return;
		}

		// ako trebamo dodati novu liniju
		if (addedNewTrip != null && addedNewTrip.equals("true")) {

			if (fromTown != null && toTown != null && cena != null
					&& polazak != null && dolazak != null) {

				PersistenceManager pm = PMF.get().getPersistenceManager();

				System.out.println(fromTown + " , " + toTown + " , " + cena
						+ " , " + polazak + " , " + dolazak);

				System.out.println("Ucitavamo prevoznika");
				Prevoznik prevoznik = (Prevoznik) session
				.getAttribute("prevoznik");

				try {
					Mesto mestoOd = Util.getMestoFromName(fromTown);
					Mesto mestoDo = Util.getMestoFromName(toTown);
					int iCena = Integer.parseInt(cena);
					SimpleDateFormat sdf = new SimpleDateFormat("hh:mm");
					Date dPolazak = sdf.parse(polazak);
					Date dDolazak = sdf.parse(dolazak);
					// ucitavamo i dodajemo povlastice
					List<Key> povls = new ArrayList<Key>();
					// prolazimo kroz sve selektovane povlastice u bens i
					// dodajemo ih u putnu liniju
					for (int i = 0; i < bens.length; i++) {
						Povlastica povl = Util.getEntityFromTableByID(
								Povlastica.class, bens[i]);
						povls.add(povl.getSifra());
					}

					PutnaDuz pd = new PutnaDuz(iCena, dPolazak, dDolazak,
							povls, mestoOd.getSifra(), mestoDo.getSifra(),
							prevoznik.getSifra());
					pm.makePersistent(pd);

				} catch (Exception e) {
					e.printStackTrace();
					System.out.println("ERROR: Neispravno uneti podaci!!!");
					RequestDispatcher disp = req
					.getRequestDispatcher("/WebContent/addTrip.jsp");
					disp.forward(req, resp);
					return;
				}
				// redirektovacemo na pocetnu stranicu
				RequestDispatcher disp = req
				.getRequestDispatcher("/timeTableServlet");
				disp.forward(req, resp);
				pm.close();
				return;
			} else {
				// nepravilno uneti podaci, ispisati gresku
				System.out.println("Neispravni podaci");
				System.out.println(req.getQueryString());
				RequestDispatcher disp = req
				.getRequestDispatcher("WebContent/addTrip.jsp");
				disp.forward(req, resp);
				return;
			}
		}

		Mesto mfromTown = (Mesto) session.getAttribute("mfromTown");
		Mesto mToTown = (Mesto) session.getAttribute("mToTown");

		if (mfromTown != null && mToTown != null) {
			Vector<PutnaDuz> trips = Util
			.getAllEntitiesFromTable(PutnaDuz.class);
			//trips = Util.getPaths(mfromTown, mToTown, trips, Util.NAJBRZI);
			session.setAttribute("allTrips", trips);
		}

		RequestDispatcher disp = req
		.getRequestDispatcher("WebContent/admin/adminTimeTable.jsp");
		disp.forward(req, resp);
		return;
	}

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
	throws ServletException, IOException {
		doPost(req, resp);
	}
}